#! /bin/bash

#    / **
#    * 文件名：restartServer.sh
#    * 版权： Copyright 谢振斌  All Rights Reserved.
#    * 描述： Shell模板
#    * 修改人：张三
#    * 修改时间：2019-07-18 19:38:33
#    * 修改内容：新增
#    */ 

#    / **
#    *〈停止当前某运行的java服务〉
#    *〈功能详细描述〉
#    * @param [无]
#    * @return [无]
#    * @deprecated
#    */
function  stopOnejarServer()
{
    echo "---停止当前某运行的java服务---"

    # 打印 java 服务进程列表
    echo "打印 java 服务进程列表"
    ps -aux|grep java | grep -v grep

    # 获取某一java程序的进程号并关闭
    pid=`ps -ef | grep "xxx-platform-sso-1.0-SNAPSHOT" | grep -v grep | awk '{print $2}'`
    kill -9 $pid

    # 打印 java 服务进程列表
    echo "再次打印 java 服务进程列表"
    ps -aux|grep java | grep -v grep
    # 打印当前日期
    echo "打印当前系统时间"
    date
}

#    / **
#    *〈停止系统所有运行的java服务〉
#    *〈功能详细描述〉
#    * @param [无]
#    * @return [无]
#    * @deprecated
#    */
function  stopAllJavaServer()
{
    echo "---停止系统所有运行的java服务---"
    echo "打印当前系统时间"
    date
    #echo "切换到jar所在目录"
    #cd /root/project
    echo "打印到jar所在目录路径"
    pwd

    # 打印 java 服务进程列表
    echo "打印 java 服务进程列表"
    ps -aux|grep java | grep -v grep

    # 获取全部的java程序的进程号全部关闭
    # 获取全部的java程序信息
    ps -aux|grep java | grep -v grep

    # 获取全部的java程序的进程号
    pids=$(ps -ef | grep java | grep -v grep  | awk '{print $2}')

    # 循环一个个关闭
    echo "执行循环关闭操作"
    for pid in $pids
    do
        echo  $pid
        kill -9  $pid
    done
    # 打印 java 服务进程列表
    echo "再次打印 java 服务进程列表"
    ps -aux|grep java | grep -v grep

    # 打印当前日期
    echo "打印当前系统时间"
    date
}

#    / **
#    *〈启动当前目录下的所有jar包〉
#    *〈功能详细描述〉
#    * @param [无]
#    * @return [无]
#    * @deprecated
#    */
function  startCurrentFolderAllJarAsServer()
{
    echo "---启动当前目录下的jar服务---"
    echo "打印当前系统时间"
    date
    #echo "切换到jar所在目录"
    #cd /root/project
    echo "打印到所在目录路径"
    pwd
    echo "打印当前目录路径文件列表"
    ls -al

    echo "获取扩展名为.jar的文件列表"
    local _jarFilesList=$(find ./ -name *.jar)
    # XXX模块
    # 循环一个个开启
    echo "循环一个个开启"
    for jarFilesList in ${_jarFilesList}
    do
        #echo  ${jarFilesList}
        echo "执行挂起"${jarFilesList}
        nohup java -jar ${jarFilesList} --spring.profiles.active=sit > ${jarFilesList}.log 2>&1 &
    done
    echo "循环结束 "
    
    ## 查看挂起执行情况
    echo "查看挂起的任务列表"
    jobs
    
    ##
    echo "查看系统正在运行java项目执行进程"
    ps -aux|grep java | grep -v grep

    # 打印当前日期
    echo "打印当前系统时间"
    date
}

function  stopCurrentFolderAllJarServer()
{
    echo "---停止当前文件夹下的jar服务---"
    echo "打印当前系统时间"
    date
    #echo "切换到jar所在目录"
    #cd /root/project
    echo "打印所在目录路径"
    pwd
    echo "打印当前目录路径文件列表"
    ls -al

    echo "获取扩展名为.jar的文件列表"
    #local _jarFilesList=$(ls | grep *.jar | grep -v grep)
    local _jarFilesList=$(find ./ -name *.jar)
    # XXX模块
    # 循环一个个关闭
    echo "循环一个个关闭"
    for jarFilesList in ${_jarFilesList}
    do
        echo "停止"${jarFilesList}
        pids=$(ps -ef | grep ${jarFilesList} | grep -v grep  | awk '{print $2}')
        for pid in $pids
        do
            echo  $pid
            kill -9  $pid
        done
    done
    
    ## 查看挂起执行情况
    echo "查看挂起的任务列表"
    jobs
    
    ##
    echo "查看系统正在运行java项目执行进程"
    ps -aux|grep java | grep -v grep

    # 打印当前日期
    echo "打印当前系统时间"
    date
}

#    / **
#    *〈流程控制〉
#    *〈该脚本的主函数〉
#    * @param [无]
#    * @return [无]
#    * @exception/throws [无] 
#    * @deprecated
#    */
function processControlMain()
{
    # 打印当前系统时间
    echo "Start..."
    echo "打印当前系统时间"
    date
   
    # 此处是你的代码
    # ...
    # 切换路径到项目中
    pwd
    cd api-etc-cloud
    pwd
    stopCurrentFolderAllJarServer

    startCurrentFolderAllJarAsServer
    # 打印当前系统时间
    echo "打印当前系统时间"
    date
    echo "The End."
}

# 执行入口
if true 
#if false 
then

    echo "true"
    pwd
    cd /opt/docker/images/nginx-io/web/api-etc-cloud/ 
    # 开始执行  从标准输入中读取并同时写入到标准输出和指定的文件上
    processControlMain  | tee -a ./restartServer.sh.log
else
    echo "false"
    ## 函数单元测试
    # stopCurrentFolderAllJarServer
    # startCurrentFolderAllJarAsServer
fi

# 脚本结束
